package com.ysd.ServiceImpl;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.ysd.Service.ModulesServcie;
import com.ysd.entity.Modules;
import com.ysd.repository.ModulesRepository;
import com.ysd.util.Treemodule;
@Service
public class ModulesServiceImpl implements ModulesServcie {
@Autowired
private ModulesRepository modulesRepository;
	@Override
	public List<Treemodule> findModulesTree() {
		// TODO Auto-generated method stub
		return this.getModulesTree(modulesRepository.findAll());
	}
	
	public List<Treemodule> getModulesTree(List<Modules> modules){
		// 创建模块集合
		List<Treemodule> tList = new ArrayList<Treemodule>();
		
		// 遍历原模块集合
		for(Modules m:modules) {
			// 如果是父模块，存入模块集合-----父模块ID是0
			if(m.getParent().getMid()==0) {
				Treemodule t = new Treemodule();
				t.setTitle(m.getMname());
				t.setId(m.getMid());
				t.setField(m.getPath());
				List<Treemodule> childrens = this.getChildModules(modules, m);
				if(childrens!=null) {
					t.setChildren(childrens);
				}
				
				tList.add(t);
			}else {
			}
		}
		 
		return tList;
	}

	// 查找子模块方法
	public List<Treemodule> getChildModules(List<Modules> modules,Modules parent){
		// 创建子模块集合
		List<Treemodule> childList = new ArrayList<Treemodule>();
		
		for(Modules m:modules) {
			if(m.getParent().getMid()!=0) {
				// 判断是否有子模块
				if(parent.getMid().equals(m.getParent().getMid())) { 
					Treemodule t = new Treemodule();
					t.setTitle(m.getMname());//OK
					t.setId(m.getMid());
					t.setField(m.getPath());
					//查询该模块下的子模块
					List<Treemodule> childrens = this.getChildModules(modules, m);
					if(childrens!=null) {
						t.setChildren(childrens);
					}
					childList.add(t);
				}
				
			}
			
		}
		
		return childList;
	}
	/**
	 * 新增或者修改
	 */
	@Override
	public Modules insertOrUpdateModules(Modules modules) {
		// TODO Auto-generated method stub
		return modulesRepository.saveAndFlush(modules);
	}

	@Override
	public Modules findModulesById(Integer id) {
		// TODO Auto-generated method stub
		return modulesRepository.findById(id).get();
	}

	@Override
	public Integer delModulesById(Integer id) { 
		// TODO Auto-generated method stub 
		try {
			modulesRepository.deleteById(id);
			return 1;
		} catch (Exception e) {
			// TODO: handle exception
			return 0;
		}
	}

	@Override
	public List<Modules> findAllModules() {
		// TODO Auto-generated method stub
		return modulesRepository.findAll();
	}

	/** 权限
	 * 获取该用户的所有模块
	 * 
	 * @param modules
	 * @return
	 */
	@Override
	public List<Treemodule> findUserModules(List<Modules> modules) {
		// TODO Auto-generated method stub
		return this.getModulesTree(modules);
	}
}
